package com.mzy.olddate.demo.basics;

import java.io.UnsupportedEncodingException;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author mzy
 * @Date 2021/7/18 16:41
 * @Version 1.0
 */
public class EncodeDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        // 不同编码下，一个中文汉字所占用的字符长度
        // gbk
        String s="相见莫相离ABC";
        byte[] bytes01 = s.getBytes("gbk");
        for (byte b:bytes01
             ) {
            System.out.print(Integer.toHexString(b & 0xff)+" ");
        }

        System.out.println("");
        System.out.println("-------------------");

        // utf-8
        byte[] bytes02 = s.getBytes("UTF-8");
        for (byte b:bytes02
        ) {
            System.out.print(Integer.toHexString(b & 0xff)+" ");
            // 转换为二进制
            System.out.println(Integer.toBinaryString(b));
        }

        System.out.println("-------------------");

        //utf-16be -- 中文，英文字符都是两个字节ssss
        byte[] bytes03 = s.getBytes("utf-16be");
        for (byte b:bytes03
        ) {
            System.out.print(Integer.toHexString(b & 0xff)+" ");
        }

        System.out.println();
        System.out.println("-------------------");
        /**
         * 所以，当你的字节序列以某种编码时，这个时候想把字节序列变成
         * 字符串，也需要用这种编码方式，否则会出现乱码
         */

        String str1=new String(bytes01);
        System.out.println(str1);
        String str2=new String(bytes03);
        System.out.println(str2);
        String str3=new String(bytes02);
        System.out.println(str3);

        /**
         * jvm内部使用的字符集编码为utf-16
         */
        System.out.println("Java中字符编码是UTF-16BE");
    }

}
